package com.yociyy.admin.controller;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageHelper;
import com.yociyy.admin.biz.BaseUserBiz;
import com.yociyy.admin.model.entity.BaseUser;
import com.yociyy.common.core.msg.R;
import com.yociyy.common.core.msg.TableR;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 用戶信息
 *
 * @author YoCiyy
 * @date 2019-12-12
 */
@RestController
@RequestMapping("/user")
@Api(tags = "用户相关接口信息")
public class BaseUserController {

	@Autowired
	private BaseUserBiz userBiz;

	/**
	 * 查询用户分页信息
	 *
	 * @param params 分页查询条件
	 * @return 用户分页信息
	 */
	@GetMapping("/page")
	@ApiOperation(value = "重写用户信息分页 (条件查询包含部门树、用户信息联动)")
	public TableR page(@RequestParam Map<String, Object> params) {
		PageHelper.startPage(params);
		return new TableR(userBiz.selectUserList(params));
	}

	/**
	 * 查询用户信息通过id
	 * 
	 * @param id 用户id
	 * @return 结果
	 */
	@GetMapping("/{id}")
	public R getUser(@PathVariable Long id) {
		return R.success(userBiz.getUserById(id));
	}

	/**
	 * 新增用户信息
	 * 
	 * @param user 用户信息
	 * @return 结果
	 */
	@PostMapping
	public R addUser(@RequestBody BaseUser user) {
		userBiz.insertUser(user);
		return R.success();
	}

	/**
	 * 修改用户信息
	 * 
	 * @param user 用户信息
	 * @return 结果
	 */
	@PutMapping
	public R editUser(@RequestBody BaseUser user) {
		// 判断是否是超级管理员
		if (ObjectUtil.isNotEmpty(user.getId()) && BaseUser.isAdmin(user.getId())) {
			return R.error("不允许修改超级管理员用户");
		}
		userBiz.updateUser(user);
		return R.success();
	}

	/**
	 * 删除用户信息
	 * 
	 * @param ids 用户id串
	 * @return 结果
	 */
	@DeleteMapping
	public R delUser(@RequestParam String ids) {
		long[] idArray = StrUtil.splitToLong(ids, ',');
		for (Long id : idArray) {
			// 判断是否是超级管理员
			if (BaseUser.isAdmin(id)) {
				return R.error("不允许修改超级管理员用户");
			}
		}
		userBiz.deleteByIds(idArray);
		return R.success();
	}

}
